/*完美长方体，又称完美盒，指棱长、面对角线和体对角线都是整数的长方体。
  编写一个C程序，完成：
  1）找出一个范围，在这个范围内不存在完美长方体；
  2）在a,b,c,d,e,f,g∈[1,10000]范围内，寻找一个接近的完美长方体；
  3）在整数范围内，寻找一个接近的完美长方体。

  思路：
  第一个问题，使用多重循环来找；
  第二个问题，指定a，b，c的值，看d,e,f,g是否接近为整数，
  把最接近的结果打印出来
  第三个问题，在第二个问题的基础上，扩大搜索的范围。
*/
#include <stdio.h>
#include <math.h>
typedef  unsigned char UINT8;
typedef  unsigned short  int UINT16;
typedef  unsigned int UINT32;

int main()
{

//	UINT32 a, b, c;
    double d, e, f, g;
	//a、b、c为边长，d,e,f为面对角线长度，g为体对角线长度
	UINT32 rangeMax, rangeMin;
	rangeMax  = 100;
	rangeMin = 1;
	UINT8 rst = 0; //rst为1表示找到了，为0表示没有找到

	// 1）找出一个范围，在这个范围内不存在完美长方体；
	for (UINT32 ia = rangeMin; ia <= rangeMax; ia++)
	{
		for (UINT32 ib = rangeMin; ib <= rangeMax; ib++)
		{
			for (UINT32 ic = rangeMin; ic <= rangeMax; ic++)
			{
				for (UINT32 id = rangeMin; id <= rangeMax; id++)
				{
					for (UINT32 ie = rangeMin; ie <= rangeMax; ie++)
					{
						for (UINT32 ivf = rangeMin; ivf <= rangeMax; ivf++)
						{
							for (UINT32 ig = rangeMin; ig <= rangeMax; ig++)
							{
								/*判断是否满足,若满足就是完美立方体，
								若不能满足，则在这个范围内不存在完美立方体*/
								if ((ia * ia + ib * ib == id * id) &&
								    (ia * ia + ic * ic == ivf * ivf) &&
								    (ib * ib + ic * ic == ie * ie ) &&
								    (ivf * ivf + ib * ib == ig * ig)
								   )
								{
									//找到了完美数
									rst = 1;
								}
							}

						}
					}
				}
			}
		}
	}

	if (rst == 1)
		printf("找到了完美长方体\n");
	else
		printf("没有找到了完美长方体\n");

//    2）在a,b,c,d,e,f,g∈[1,10000]范围内，寻找一个接近的完美长方体；
	for (UINT32 ia = rangeMin; ia <= rangeMax; ia++)
	{
		for (UINT32 ib = rangeMin; ib <= rangeMax; ib++)
		{
			for (UINT32 ic = rangeMin; ic <= rangeMax; ic++)
			{
				d = sqrt(ia * ia + ib * ib );
				f = sqrt(ia * ia + ic * ic);
				e = sqrt(ib * ib + ic * ic);
				g = sqrt(f * f + ib * ib );
                //判断d,f,e,g是否接近一个整数
			}
		}
	}



//	printf("UINT8 has %lld bytes\n", sizeof(UINT8));
//	printf("UINT16 has %lld byte\n", sizeof(UINT16));
//	printf("UINT32 has %lld byte\n", sizeof(UINT32));


}

